package org.xbs.demo1.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.xbs.demo1.mapper.UserMapper;
import org.xbs.demo1.pojo.PageResult;
import org.xbs.demo1.pojo.User;
import org.xbs.demo1.pojo.UserQueryParam;
import org.xbs.demo1.service.IUserService;
import org.xbs.demo1.tools.FileTools;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

@Service
public class UserService implements IUserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public User getUserById(Integer id) throws IOException {
        //先用一个自定义的User类接收，因为还要更新修改时间
        User user = userMapper.getUserById(id);
        FileTools.uploadFile(user);
        return user;
    }
    @Override//包含参数image字段，可能包含一个新文件字段
    public void updateUser(User user) throws IOException {
        user.setUpdateTime(LocalDateTime.now());//说实话createtime这个字段我想丢掉了，但为了保证程序的稳定我还是不丢了
        //先删除旧文件，因为存文件会覆盖数据库中的旧文件
        FileTools.deleteFile(user);
        //再更新数据库，保存新的文件在数据库里
        FileTools.saveFile(user);
        userMapper.updateUser(user);
    }
    @Override//条件分页查询方法
    public PageResult<User> getUsers(UserQueryParam userQueryParam) throws IOException {
        //获得所有员工数据
        Integer total = userMapper.getUsersTotal();
        //得到起始索引
        Integer start = (userQueryParam.getPage()-1)*userQueryParam.getPagesize();
        userQueryParam.setStart(start);
        //进行条件分页查询
        List<User> items = userMapper.getUsers(userQueryParam);
        //在这里对items中的元素进行修改上传base64编码的头像，因为前端需要base64编码的头像
        for (User user : items) {
            FileTools.uploadFile(user);
        }
        //返回数据
        return new PageResult<User>(total,items);

    }
    @Override//因为要获得数据库中的文件路径所以要新增根据id查询用户
    public void deleteUsers(List<Integer> ids) {
        for (Integer id : ids) {
            User user = userMapper.getUserById(id);
            FileTools.deleteFile(user);
        }
        userMapper.deleteUsers(ids);
    }
    @Override
    public void addUsers(List<User> users) throws IOException {
      //先遍历集合，设置每个元素的createTime和updateTime
        for (User user : users) {
            user.setCreateTime(LocalDateTime.now());
            user.setUpdateTime(LocalDateTime.now());
            //调用FileTools中的saveFile()方法
            FileTools.saveFile(user);
        }
        //再调用userMapper中的addUsers()方法
        userMapper.addUsers(users);
    }
}
